<?php
class AccessManager extends DooController {

	/**
	 *
	 * Tableau associatif des droits d'accès qui contient
	 * nom du module => URL d'accès
	 * Le nom du module est le nom/clef à afficher dans l'application
	 * L'URL d'accès est de la forme module/controller/method
	 * @var tableau associatif nom_module => URL d'accès
	 */
	private $access=array();

	/**
	 *
	 * ID de l'utilisateur
	 * @var int
	 */
	private $user;


	/**
	 *
	 * Initialise une variable de session qui contient les droits d'accès
	 * Les droits d'accès sont en base de données. Un utilisateur a accès ou à un module
	 * Les droits d'accès sont chargés lors de la connexion de l'utilisateur.
	 * PENSER à se deconnecter lors des modifications
	 * La Variable de sessions $_SESSION['id'] doit être initialisée pour récupérer les droits d'accès
	 */
	public function __construct($user_id){
		$this->user = $user_id;
		//On vérifie si il n'y a pas les informations dans $_SESSION avant de faire un appel à la BD
		if(empty($_SESSION['accessRight'])){
			Doo::loadModel('GlboAccessRight');
			Doo::loadModel('GlboModule');
			$accessRight_table = new GlboAccessRight();
			$accessRight_table->usr_id = $this->user;
			$result_accessRight = $this->db()->find($accessRight_table, array("groupby"=>"mod_id"));
			foreach ($result_accessRight as $accessRight_tuple){
				$module_table = new GlboModule();
				$module_table->mod_id = $accessRight_tuple->mod_id;
				$module_tuple = $this->db()->find($module_table, array('limit'=> 1));
				
				$menu_name = GlobalBO::getModuleFunction($module_tuple->mod_module, $module_tuple->mod_module.'_MainController','getMenu');
				$this->access[$menu_name] = $module_tuple->mod_module.'/'.$module_tuple->mod_module.'_MainController/index';
				
				$module_table = null;
				$module_tuple = null;
			}
			//$this->access['Nom du Module'] = 'test/MainController/index';
			$_SESSION['accessRight'] = $this->access;
		}else{
			$this->access = $_SESSION['accessRight'];
		}
	}
	/**
	 *
	 * Renvoie le tableau associatif des droits d'accès de l'utilisateur
	 * @return Un tableau contenant nom module => URL URL avec le path relatif module/controller/method
	 */
	public function getAccessRight(){
		return $this->access;

	}

	/**
	 *
	 * Renvoie le nom des modules (dossier dans module/) pour un utilisateur donné.
	 * @return Array qui contient les noms des modules array('name1', 'name2', ...)
	 */
	public function getAccessModule(){
		if (sizeof($this->access) == 0)
			return null;
		foreach ($this->access as $v) {
			$module = explode('/', $v);
			$tab[] = $module[0];
		}
		return $tab;
	}

	public function getNameOfModule($module_folder){
		foreach ($this->access as $module_name => $v) {
			$module = explode('/', $v);
			$module = $module[0];
			if($module == $module_folder)
			return $module_name;
		}
		return 'Nom Module Introuvable';
	}

	public function getURL($module_folder){
		foreach ($this->access as $module_name => $v) {
			$module = explode('/', $v);
			$module = $module[0];
			if($module == $module_folder)
			return $v;
		}
	}

}